package com.tabnet.servlet;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.tabnet.beans.gammeproduit.AppelOffre;
import com.tabnet.beans.gammeproduit.PropositionGamme;
import com.tabnet.beans.personnes.Fournisseur;
import com.tabnet.dao.DAOAppelOffre;
import com.tabnet.dao.DAOException;
import com.tabnet.dao.DAOFactory;
import com.tabnet.dao.DAOFournisseur;
import com.tabnet.dao.DAOPropositionGamme;
import com.tabnet.form.ConnexionFournForm;

/**
 * Servlet qui s'occupe de connecter le fournisseur à sa partie administration
 *	ajoute aussi en session toutes les données utiles au fournisseur
 */
public class ConnexionFourn extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
    public static final String ATT_USER         = "fournisseur";
    public static final String ATT_FORM         = "form";
    public static final String ATT_SESSION_USER = "sessionFournisseur";
    public static final String ATT_LES_APPELS	= "appelsOffre";
    public static final String ATT_LES_PROPS	= "propositions";
    public static final String VUE              = "/WEB-INF/connexionFourn.jsp";
    public static final String VUE_SUCCES 	    = "/adminFourn/accueil.jsp";
    
    private DAOFournisseur fournDao;
    private DAOAppelOffre  appelDao;
    private DAOPropositionGamme  proposDao;

    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        /* Affichage de la page de connexion */
        this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
    }

    public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
    	try {
			this.fournDao = DAOFactory.getInstance().getFournisseurDAO();
			this.appelDao = DAOFactory.getInstance().getAppelOffreDAO();
			this.proposDao = DAOFactory.getInstance().getPropositionGammeDAO();
		} catch (DAOException e1) {
			e1.printStackTrace();
		}
    	/* Préparation de l'objet formulaire */
        ConnexionFournForm form = new ConnexionFournForm(fournDao);

        /* Traitement de la requête et récupération du bean en résultant */
        Fournisseur fourn;
        
		try {
			fourn = form.connecterFourn( request );
		} catch (DAOException e) {
			fourn = null;
			e.printStackTrace();
		}

        /* Récupération de la session depuis la requête */
        HttpSession session = request.getSession();

        /* Stockage du formulaire et du bean dans l'objet request */
        request.setAttribute( ATT_FORM, form );
        request.setAttribute( ATT_USER, fourn );
        
        /*
         * Si aucune erreur de validation n'a eu lieu, alors ajout du bean
         * Fournisseur à la session, sinon suppression du bean de la session.
         */
        if ( form.getErreurs().isEmpty() ) {
        	HashMap<String, AppelOffre> lesAppels = null;
        	HashMap<String, PropositionGamme> lesPropositions = null;
			try {
        		lesAppels = appelDao.listerAppelFourn(fourn);
        		lesPropositions = proposDao.listerPropositions(fourn);
			} catch (DAOException e) {
				e.printStackTrace();
			}
            
            session.setAttribute( ATT_LES_APPELS, lesAppels );
            session.setAttribute( ATT_LES_PROPS, lesPropositions );
            session.setAttribute( ATT_SESSION_USER, fourn );
            
            response.sendRedirect( request.getContextPath() + VUE_SUCCES );
        } else {
            session.setAttribute( ATT_SESSION_USER, null );
            this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
        }
    }
}
